---------------------------------------- Chapitre I - Les bases ----------------------------------------
Notions de bases
La mémoire
Ce sont des emplacements où sont stockées des données. On peut accéder à ces emplacements, que ce soit en lecture pour récupérer des données ou en écriture pour conserver des données, grâce à une adresse.
La pile (ou stack) est une partie particulière de la mémoire. Elle sert principalement à stocker des données provisoires (résultat intermédiaire d'un calcul, adresse de retour d'une sous-routine, etc). Comme son nom l'indique, on empile des valeurs les unes sur les autres. Retenez cette notion d'empilage car c'est elle qui fait le fonctionnement particulier de la pile. En effet, pour enlever une valeur, il faut d'abord retirer une à une toutes celles qui sont au-dessus, en commençant par la plus récente. Ce traitement des données est appelé LIFO (Last In First Out).
Le processeur
C'est lui qui exécute les instructions données par le programme. Pour ce faire, il possède des mémoires internes qui sont utilisées de manière spécifique et appelées registres. On répartit ceux-ci en 4 groupes : les registres généraux (ou de travail), les registres de segments, les registres d'offset (ou pointeurs) et le registre Eflag (drapeaux ou indicateurs).
Ce sont des registres de 32 bits qui servent principalement à stocker des résultats intermédiaires. Ils sont au nombre de 4 :
EAX : Accumulateur
EBX : Registre de base
ECX : Compteur
EDX : Données
Chaque registre peut être utilisé en registres de 16 bits (AX, BX, CX ou DX) qui eux peuvent être divisés en 2 registres de 8 bits ( AH et AL, BH et BL, CH et CL, DH et DL). On parle alors de la partie haute ( H pour hight) ou de la partie basse (L pour low) du registre :
EAX (32 bits) |
||
AX (16 bits) |
||
AH (8 bits) |
AL (8 bits) |
Pour savoir où retrouver des données, on a besoin d'une adresse. Celle-ci sera composée de 2 parties : le segment et l'offset. Les segments sont au nombre de 6 et permettent de savoir dans quelle zone de la mémoire il faut aller chercher :
CS (Code Segment) : Indique l'adresse de début de code
SS (Stack Segment) : Adresse de la pile
DS (Data Segment) : Adresse des données du programme
ES (Extra Segment) : Segment supplémentaire
FS (extra Segment) : Segment supplémentaire
GS (extra Segment) : Segment supplémentaire
C'est la deuxième partie de l'adresse, celle qui nous indique précisement l'emplacement dans le segment concerné de ce que nous cherchons. Il y en a 5 :
ESI (Extended Source Index) : Utilisé lors de manipulation de suite d'octets, associé
à DS
EDI (Extended Destination Index) : Utilisé lors de manipulation de suite d'octets, associé
à DS ou ES
EBP (Extended Base Pointer) : Pointe sur une adresse dans la pile, associé à SS
ESP (Extended Stack Pointer) : Contient le déplacement nécessaire pour atteindre le sommet
de la pile
EIP (Extended Instruction Pointer) : Indique la prochaine instruction qui va être exé
cutée, associéà CS
C'est un registre dont chaque bit donne une indication au processeur, chaque bit ne pouvant avoir qu'une valeur : 0 ou 1. Ceux qui nous intéressent plus particulièrement sont :
CF (Carry Flag) : Positionné à 1 si la dernière opération a
généré une retenue (mode non signé), sinon à 0
PF (Parity Flag): Positionné à 1 si dans les 8 bits de poids faible du résultat
de la dernière opération, le nombre de bits à 1 est pair, à 0 si ce nombre est impair.
Tout cela peut paraître compliqué quand on débute, mais avec la pratique ces notions deviendront rapidement évidentes.